home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
gfx
/
misc
/
gnuplot-3.7src.lha
/
gnuplot-3.7src
/
gnuplot-3.7.lha
/
gnuplot-3.7
/
term
/
hppj.trm
< prev
next >
Wrap
Text File
|
1998-11-26
|
8KB
|
290 lines
/*
* $Id: hppj.trm,v 1.13 1998/04/14 00:17:51 drd Exp $
*
*/
/* GNUPLOT - hppj.trm */
/*[
* Copyright 1990 - 1993, 1998
*
* Permission to use, copy, and distribute this software and its
* documentation for any purpose with or without fee is hereby granted,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
*
* Permission to modify the software is granted, but not the right to
* distribute the complete modified source code. Modifications are to
* be distributed as patches to the released version. Permission to
* distribute binaries produced by compiling modified sources is granted,
* provided you
* 1. distribute the corresponding source modifications from the
* released version in the form of a patch file along with the binaries,
* 2. add special version identification to distinguish your version
* in addition to the base release version number,
* 3. provide your name and address as the primary contact for the
* support of your modified version, and
* 4. retain our contact information in regard to use of the base
* software.
* Permission to distribute the released version of the source code along
* with corresponding source modifications in the form of a patch file is
* granted with same provisions 2 through 4 for binary distributions.
*
* This software is provided "as is" without express or implied warranty
* to the extent permitted by applicable law.
]*/
/*
* This file is included by ../term.c.
*
* This terminal driver supports:
* hppj
*
* AUTHORS
* Dan Merget (danm@sr.hp.com)
*
* This file was based on the hpljii file by:
* John Engels
* Russell Lang
* Maurice Castro
*
* send your comments or suggestions to (info-gnuplot@dartmouth.edu).
*
*/
/* The following HP laserjet series II driver uses generic bit mapped graphics
* routines from bitmap.c to build up a bit map in memory.
*/
/*
* adapted to the new terminal layout by Stefan Bodewig (Dec. 1995)
*/
#include "driver.h"
#ifdef TERM_REGISTER
register_term(hppj)
#endif
#ifdef TERM_PROTO
TERM_PUBLIC void HPPJoptions __PROTO((void));
TERM_PUBLIC void HPPJinit __PROTO((void));
TERM_PUBLIC void HPPJreset __PROTO((void));
TERM_PUBLIC void HPPJgraphics __PROTO((void));
TERM_PUBLIC void HPPJtext __PROTO((void));
TERM_PUBLIC void HPPJlinetype __PROTO((int linetype));
#define HPPJmove b_move
#define HPPJvector b_vector
#define HPPJtext_angle b_text_angle
#define HPPJput_text b_put_text
/* We define 3 different font sizes: 5x9, 9x17, and 13x25 */
#define HPPJ_DPI 180 /* dots per inch */
#define HPPJ_PLANES 3 /* color planes */
#define HPPJ_COLORS (1 << HPPJ_PLANES)
/* make XMAX and YMAX a multiple of 8 */
#define HPPJ_XMAX (8*(unsigned int)(9.5 * HPPJ_DPI / 8.0 + 0.9))
#define HPPJ_YMAX (8 * HPPJ_DPI)
/* default values for term_tbl */
#define HPPJ_9x17_VCHAR FNT9X17_VCHAR
#define HPPJ_9x17_HCHAR FNT9X17_HCHAR
#define HPPJ_9x17_VTIC (FNT9X17_VCHAR / 2)
#define HPPJ_9x17_HTIC (FNT9X17_HCHAR / 2)
#endif /* TERM_PROTO */
#ifndef TERM_PROTO_ONLY
#ifdef TERM_BODY
static int hppj_font = FNT9X17;
TERM_PUBLIC void HPPJoptions()
{
char opt[10];
#define HPPJERROR "expecting font size FNT5X9, FNT9X17, or FNT13X25"
term_options[0] = NUL; /* default to empty string and 9x17 font */
hppj_font = FNT9X17; /* in case of error or empty options */
if (!END_OF_COMMAND) {
if (token[c_token].length > 8) {
int_error(HPPJERROR, c_token);
}
capture(opt, c_token, c_token, /*4 */ 9); /* HBB 980226 */
if (!strcmp(opt, "FNT5X9")) {
hppj_font = FNT5X9;
strcpy(term_options, "FNT5X9");
} else if (!strcmp(opt, "FNT9X17")) {
hppj_font = FNT9X17;
strcpy(term_options, "FNT9X17");
} else if (!strcmp(opt, "FNT13X25")) {
hppj_font = FNT13X25;
strcpy(term_options, "FNT13X25");
} else {
int_error(HPPJERROR, c_token);
}
c_token++;
}
}
TERM_PUBLIC void HPPJinit()
{
/* HBB 980226: moved this here, from graphics(): only init() may
* change fields of *term ! */
switch (hppj_font) {
case FNT5X9:
term->v_char = FNT5X9_VCHAR;
term->h_char = FNT5X9_HCHAR;
term->v_tic = FNT5X9_VCHAR / 2;
term->h_tic = FNT5X9_HCHAR / 2;
break;
case FNT9X17:
term->v_char = FNT9X17_VCHAR;
term->h_char = FNT9X17_HCHAR;
term->v_tic = FNT9X17_VCHAR / 2;
term->h_tic = FNT9X17_HCHAR / 2;
break;
case FNT13X25:
term->v_char = FNT13X25_VCHAR;
term->h_char = FNT13X25_HCHAR;
term->v_tic = FNT13X25_VCHAR / 2;
term->h_tic = FNT13X25_HCHAR / 2;
break;
}
}
TERM_PUBLIC void HPPJreset()
{
#ifdef VMS
fflush_binary();
#endif /* VMS */
}
TERM_PUBLIC void HPPJgraphics()
{
/* HBB 980226: move a block of code from here to init() */
b_charsize(hppj_font);
b_makebitmap(HPPJ_XMAX, HPPJ_YMAX, HPPJ_PLANES);
}
TERM_PUBLIC void HPPJtext()
{
int x, plane, y; /* loop indexes */
int minRow, maxRow; /* loop bounds */
int numBytes; /* Number of run-length coded bytes to output */
int numReps; /* Number of times the current byte is repeated */
fprintf(gpoutfile, "\
\033E\033*t%dR\033*r%dS\
\033*b0X\033*b0Y\033*r%dU\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*v%dA\033*v%dB\033*v%dC\033*v%dI\
\033*b1M\033*r1A",
HPPJ_DPI, HPPJ_YMAX,
HPPJ_PLANES,
90, 88, 85, 0,
53, 8, 14, 1,
3, 26, 22, 2,
4, 4, 29, 3,
53, 5, 25, 4,
2, 22, 64, 5,
89, 83, 13, 6,
4, 4, 6, 7);
/* dump bitmap in raster mode using run-length encoding */
for (x = HPPJ_XMAX - 1; x >= 0; --x) {
for (plane = 0; plane < HPPJ_PLANES; plane++) {
minRow = b_psize * plane;
maxRow = b_psize * plane + b_psize - 1;
/* Print column header */
numBytes = 0;
for (y = maxRow; y >= minRow; --y) {
if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) {
numBytes += 2;
}
}
fprintf(gpoutfile, "\033*b%d", numBytes);
(void) fputc((char) (plane < HPPJ_PLANES - 1 ? 'V' : 'W'), gpoutfile);
/* Print remainder of column */
numReps = 0;
for (y = maxRow; y >= minRow; --y) {
if (y == minRow || *((*b_p)[y] + x) != *((*b_p)[y - 1] + x)) {
(void) fputc((char) (numReps), gpoutfile);
(void) fputc((char) (*((*b_p)[y] + x)), gpoutfile);
numReps = 0;
} else {
numReps++;
}
}
}
}
fputs("\033*r1B\033E", gpoutfile);
b_freebitmap();
}
TERM_PUBLIC void HPPJlinetype(linetype)
int linetype;
{
if (linetype >= 0) {
b_setlinetype(0);
b_setvalue((linetype % (HPPJ_COLORS - 1)) + 1);
} else {
b_setlinetype(linetype + 2);
b_setvalue(HPPJ_COLORS - 1);
}
}
#endif /* TERM_BODY */
#ifdef TERM_TABLE
TERM_TABLE_START(hppj_driver)
"hppj", "HP PaintJet and HP3630 [FNT5X9 FNT9X17 FNT13X25]",
HPPJ_XMAX, HPPJ_YMAX,
HPPJ_9x17_VCHAR, HPPJ_9x17_HCHAR, HPPJ_9x17_VTIC, HPPJ_9x17_HTIC,
HPPJoptions, HPPJinit, HPPJreset, HPPJtext, null_scale, HPPJgraphics,
HPPJmove, HPPJvector, HPPJlinetype, HPPJput_text, HPPJtext_angle,
null_justify_text, do_point, do_arrow, set_font_null, 0, TERM_BINARY
TERM_TABLE_END(hppj_driver)
#undef LAST_TERM
#define LAST_TERM hppj_driver
#endif /* TERM_TABLE */
#endif /* TERM_PROTO_ONLY */
#ifdef TERM_HELP
START_HELP(hppj)
"1 hppj",
"?commands set terminal hppj",
"?set terminal hppj",
"?set term hppj",
"?terminal hppj",
"?term hppj",
"?hppj",
" The `hppj` terminal driver supports the HP PaintJet and HP3630 printers. The",
" only option is the choice of font.",
"",
" Syntax:",
" set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}",
"",
" with the middle-sized font (FNT9X17) being the default."
END_HELP(hppj)
#endif